package com.homejoy.system.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.homejoy.common.annotation.Excel;
import com.homejoy.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 房源基础信息对象 homejoy_property
 *
 * @author homeJoy
 * @date 2025-11-08
 */
public class HomejoyProperty extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 房源ID
     */
    private Long propertyId;

    /**
     * 房源编号
     */
    @Excel(name = "房源编号")
    private String propertyNo;

    /**
     * 房源标题
     */
    @Excel(name = "房源标题")
    private String propertyTitle;

    /**
     * 房源描述
     */
    @Excel(name = "房源描述")
    private String propertyDesc;

    /**
     * 房源类型(1:公寓 2:住宅 3:别墅 4:商铺 5:办公室)
     */
    @Excel(name = "房源类型(1:公寓 2:住宅 3:别墅 4:商铺 5:办公室)")
    private Integer propertyType;

    /**
     * 租赁类型(1:整租 2:合租 3:短租)
     */
    @Excel(name = "租赁类型(1:整租 2:合租 3:短租)")
    private Integer rentType;

    /**
     * 国家
     */
    @Excel(name = "国家")
    private String country;

    /**
     * 省份
     */
    @Excel(name = "省份")
    private String province;

    /**
     * 城市
     */
    @Excel(name = "城市")
    private String city;

    /**
     * 区县
     */
    @Excel(name = "区县")
    private String district;

    /**
     * 街道
     */
    @Excel(name = "街道")
    private String street;

    /**
     * 详细地址
     */
    @Excel(name = "详细地址")
    private String address;

    /**
     * 经度
     */
    @Excel(name = "经度")
    private BigDecimal longitude;

    /**
     * 纬度
     */
    @Excel(name = "纬度")
    private BigDecimal latitude;

    /**
     * 月租金
     */
    @Excel(name = "月租金")
    private BigDecimal monthlyRent;

    /**
     * 押金
     */
    @Excel(name = "押金")
    private BigDecimal deposit;

    /**
     * 付款周期(1:月付 2:季付 3:年付)
     */
    @Excel(name = "付款周期(1:月付 2:季付 3:年付)")
    private Integer paymentCycle;

    /**
     * 水电费承担(1:房东 2:租客 3:AA)
     */
    @Excel(name = "水电费承担(1:房东 2:租客 3:AA)")
    private Integer utilityBills;

    /**
     * 面积(㎡)
     */
    @Excel(name = "面积(㎡)")
    private BigDecimal area;

    /**
     * 卧室数量
     */
    @Excel(name = "卧室数量")
    private Long bedroomCount;

    /**
     * 客厅数量
     */
    @Excel(name = "客厅数量")
    private Long livingroomCount;

    /**
     * 卫生间数量
     */
    @Excel(name = "卫生间数量")
    private Long bathroomCount;

    /**
     * 厨房数量
     */
    @Excel(name = "厨房数量")
    private Long kitchenCount;

    /**
     * 阳台数量
     */
    @Excel(name = "阳台数量")
    private Long balconyCount;

    /**
     * 所在楼层
     */
    @Excel(name = "所在楼层")
    private Long floor;

    /**
     * 总楼层
     */
    @Excel(name = "总楼层")
    private Long totalFloors;

    /**
     * 朝向
     */
    @Excel(name = "朝向")
    private String orientation;

    /**
     * 装修程度(1:毛坯 2:简装 3:精装 4:豪装)
     */
    @Excel(name = "装修程度(1:毛坯 2:简装 3:精装 4:豪装)")
    private Integer decoration;

    /**
     * 是否有电梯
     */
    @Excel(name = "是否有电梯")
    private Integer hasElevator;

    /**
     * 是否有车位
     */
    @Excel(name = "是否有车位")
    private Integer hasParking;

    /**
     * 停车费
     */
    @Excel(name = "停车费")
    private BigDecimal parkingFee;

    /**
     * 发布状态(1:草稿 2:待审核 3:已发布 4:已下架 5:已删除)
     */
    @Excel(name = "发布状态(1:草稿 2:待审核 3:已发布 4:已下架 5:已删除)")
    private Integer publishStatus;

    /**
     * 租赁状态(1:可租 2:已租 3:预租 4:停租)
     */
    @Excel(name = "租赁状态(1:可租 2:已租 3:预租 4:停租)")
    private Integer rentStatus;

    /**
     * 可入住日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "可入住日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date availableDate;

    /**
     * 最短租期(月)
     */
    @Excel(name = "最短租期(月)")
    private Long minimumLease;

    /**
     * 最长租期(月)
     */
    @Excel(name = "最长租期(月)")
    private Long maximumLease;

    /**
     * 房东ID
     */
    @Excel(name = "房东ID")
    private Long landlordId;

    /**
     * 房东姓名
     */
    @Excel(name = "房东姓名")
    private String landlordName;

    /**
     * 房东电话
     */
    @Excel(name = "房东电话")
    private String landlordPhone;

    /**
     * 中介公司ID
     */
    @Excel(name = "中介公司ID")
    private Long agencyId;

    /**
     * 经纪人ID
     */
    @Excel(name = "经纪人ID")
    private Long agentId;

    /**
     * 浏览量
     */
    @Excel(name = "浏览量")
    private Long viewCount;

    /**
     * 收藏量
     */
    @Excel(name = "收藏量")
    private Long favoriteCount;

    /**
     * 联系量
     */
    @Excel(name = "联系量")
    private Long contactCount;

    /**
     * 最后浏览时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "最后浏览时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date lastViewTime;

    /**
     * 发布时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date publishTime;

    /**
     * 刷新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "刷新时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date refreshTime;

    /**
     * 版本号
     */
    @Excel(name = "版本号")
    private Long version;

    @Excel(name = "图片List")
    private List<HomejoyPropertyImage> imageList;

    /***/
    @Excel(name = "显示状态(0:不显示 1:显示)")
    private Integer displayStatus;




    public Integer getDisplayStatus() {
        return displayStatus;
    }

    public void setDisplayStatus(Integer displayStatus) {
        this.displayStatus = displayStatus;
    }

    public List<HomejoyPropertyImage> getImageList() {
        return imageList;
    }

    public void setImageList(List<HomejoyPropertyImage> imageList) {
        this.imageList = imageList;
    }

    public void setPropertyId(Long propertyId) {
        this.propertyId = propertyId;
    }

    public Long getPropertyId() {
        return propertyId;
    }

    public void setPropertyNo(String propertyNo) {
        this.propertyNo = propertyNo;
    }

    public String getPropertyNo() {
        return propertyNo;
    }

    public void setPropertyTitle(String propertyTitle) {
        this.propertyTitle = propertyTitle;
    }

    public String getPropertyTitle() {
        return propertyTitle;
    }

    public void setPropertyDesc(String propertyDesc) {
        this.propertyDesc = propertyDesc;
    }

    public String getPropertyDesc() {
        return propertyDesc;
    }

    public void setPropertyType(Integer propertyType) {
        this.propertyType = propertyType;
    }

    public Integer getPropertyType() {
        return propertyType;
    }

    public void setRentType(Integer rentType) {
        this.rentType = rentType;
    }

    public Integer getRentType() {
        return rentType;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getCountry() {
        return country;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getProvince() {
        return province;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getCity() {
        return city;
    }

    public void setDistrict(String district) {
        this.district = district;
    }

    public String getDistrict() {
        return district;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getStreet() {
        return street;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getAddress() {
        return address;
    }

    public void setLongitude(BigDecimal longitude) {
        this.longitude = longitude;
    }

    public BigDecimal getLongitude() {
        return longitude;
    }

    public void setLatitude(BigDecimal latitude) {
        this.latitude = latitude;
    }

    public BigDecimal getLatitude() {
        return latitude;
    }

    public void setMonthlyRent(BigDecimal monthlyRent) {
        this.monthlyRent = monthlyRent;
    }

    public BigDecimal getMonthlyRent() {
        return monthlyRent;
    }

    public void setDeposit(BigDecimal deposit) {
        this.deposit = deposit;
    }

    public BigDecimal getDeposit() {
        return deposit;
    }

    public void setPaymentCycle(Integer paymentCycle) {
        this.paymentCycle = paymentCycle;
    }

    public Integer getPaymentCycle() {
        return paymentCycle;
    }

    public void setUtilityBills(Integer utilityBills) {
        this.utilityBills = utilityBills;
    }

    public Integer getUtilityBills() {
        return utilityBills;
    }

    public void setArea(BigDecimal area) {
        this.area = area;
    }

    public BigDecimal getArea() {
        return area;
    }

    public void setBedroomCount(Long bedroomCount) {
        this.bedroomCount = bedroomCount;
    }

    public Long getBedroomCount() {
        return bedroomCount;
    }

    public void setLivingroomCount(Long livingroomCount) {
        this.livingroomCount = livingroomCount;
    }

    public Long getLivingroomCount() {
        return livingroomCount;
    }

    public void setBathroomCount(Long bathroomCount) {
        this.bathroomCount = bathroomCount;
    }

    public Long getBathroomCount() {
        return bathroomCount;
    }

    public void setKitchenCount(Long kitchenCount) {
        this.kitchenCount = kitchenCount;
    }

    public Long getKitchenCount() {
        return kitchenCount;
    }

    public void setBalconyCount(Long balconyCount) {
        this.balconyCount = balconyCount;
    }

    public Long getBalconyCount() {
        return balconyCount;
    }

    public void setFloor(Long floor) {
        this.floor = floor;
    }

    public Long getFloor() {
        return floor;
    }

    public void setTotalFloors(Long totalFloors) {
        this.totalFloors = totalFloors;
    }

    public Long getTotalFloors() {
        return totalFloors;
    }

    public void setOrientation(String orientation) {
        this.orientation = orientation;
    }

    public String getOrientation() {
        return orientation;
    }

    public void setDecoration(Integer decoration) {
        this.decoration = decoration;
    }

    public Integer getDecoration() {
        return decoration;
    }

    public void setHasElevator(Integer hasElevator) {
        this.hasElevator = hasElevator;
    }

    public Integer getHasElevator() {
        return hasElevator;
    }

    public void setHasParking(Integer hasParking) {
        this.hasParking = hasParking;
    }

    public Integer getHasParking() {
        return hasParking;
    }

    public void setParkingFee(BigDecimal parkingFee) {
        this.parkingFee = parkingFee;
    }

    public BigDecimal getParkingFee() {
        return parkingFee;
    }

    public void setPublishStatus(Integer publishStatus) {
        this.publishStatus = publishStatus;
    }

    public Integer getPublishStatus() {
        return publishStatus;
    }

    public void setRentStatus(Integer rentStatus) {
        this.rentStatus = rentStatus;
    }

    public Integer getRentStatus() {
        return rentStatus;
    }

    public void setAvailableDate(Date availableDate) {
        this.availableDate = availableDate;
    }

    public Date getAvailableDate() {
        return availableDate;
    }

    public void setMinimumLease(Long minimumLease) {
        this.minimumLease = minimumLease;
    }

    public Long getMinimumLease() {
        return minimumLease;
    }

    public void setMaximumLease(Long maximumLease) {
        this.maximumLease = maximumLease;
    }

    public Long getMaximumLease() {
        return maximumLease;
    }

    public void setLandlordId(Long landlordId) {
        this.landlordId = landlordId;
    }

    public Long getLandlordId() {
        return landlordId;
    }

    public void setLandlordName(String landlordName) {
        this.landlordName = landlordName;
    }

    public String getLandlordName() {
        return landlordName;
    }

    public void setLandlordPhone(String landlordPhone) {
        this.landlordPhone = landlordPhone;
    }

    public String getLandlordPhone() {
        return landlordPhone;
    }

    public void setAgencyId(Long agencyId) {
        this.agencyId = agencyId;
    }

    public Long getAgencyId() {
        return agencyId;
    }

    public void setAgentId(Long agentId) {
        this.agentId = agentId;
    }

    public Long getAgentId() {
        return agentId;
    }

    public void setViewCount(Long viewCount) {
        this.viewCount = viewCount;
    }

    public Long getViewCount() {
        return viewCount;
    }

    public void setFavoriteCount(Long favoriteCount) {
        this.favoriteCount = favoriteCount;
    }

    public Long getFavoriteCount() {
        return favoriteCount;
    }

    public void setContactCount(Long contactCount) {
        this.contactCount = contactCount;
    }

    public Long getContactCount() {
        return contactCount;
    }

    public void setLastViewTime(Date lastViewTime) {
        this.lastViewTime = lastViewTime;
    }

    public Date getLastViewTime() {
        return lastViewTime;
    }

    public void setPublishTime(Date publishTime) {
        this.publishTime = publishTime;
    }

    public Date getPublishTime() {
        return publishTime;
    }

    public void setRefreshTime(Date refreshTime) {
        this.refreshTime = refreshTime;
    }

    public Date getRefreshTime() {
        return refreshTime;
    }

    public void setVersion(Long version) {
        this.version = version;
    }

    public Long getVersion() {
        return version;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("propertyId", getPropertyId())
                .append("propertyNo", getPropertyNo())
                .append("propertyTitle", getPropertyTitle())
                .append("propertyDesc", getPropertyDesc())
                .append("propertyType", getPropertyType())
                .append("rentType", getRentType())
                .append("country", getCountry())
                .append("province", getProvince())
                .append("city", getCity())
                .append("district", getDistrict())
                .append("street", getStreet())
                .append("address", getAddress())
                .append("longitude", getLongitude())
                .append("latitude", getLatitude())
                .append("monthlyRent", getMonthlyRent())
                .append("deposit", getDeposit())
                .append("paymentCycle", getPaymentCycle())
                .append("utilityBills", getUtilityBills())
                .append("area", getArea())
                .append("bedroomCount", getBedroomCount())
                .append("livingroomCount", getLivingroomCount())
                .append("bathroomCount", getBathroomCount())
                .append("kitchenCount", getKitchenCount())
                .append("balconyCount", getBalconyCount())
                .append("floor", getFloor())
                .append("totalFloors", getTotalFloors())
                .append("orientation", getOrientation())
                .append("decoration", getDecoration())
                .append("hasElevator", getHasElevator())
                .append("hasParking", getHasParking())
                .append("parkingFee", getParkingFee())
                .append("publishStatus", getPublishStatus())
                .append("rentStatus", getRentStatus())
                .append("availableDate", getAvailableDate())
                .append("minimumLease", getMinimumLease())
                .append("maximumLease", getMaximumLease())
                .append("landlordId", getLandlordId())
                .append("landlordName", getLandlordName())
                .append("landlordPhone", getLandlordPhone())
                .append("agencyId", getAgencyId())
                .append("agentId", getAgentId())
                .append("viewCount", getViewCount())
                .append("favoriteCount", getFavoriteCount())
                .append("contactCount", getContactCount())
                .append("lastViewTime", getLastViewTime())
                .append("publishTime", getPublishTime())
                .append("refreshTime", getRefreshTime())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .append("remark", getRemark())
                .append("version", getVersion())
                .append("imageList", getImageList())
                .toString();
    }
}
